package org.example4;


import java.io.*;
import java.nio.charset.StandardCharsets;
import java.util.zip.ZipEntry;
import java.util.zip.ZipOutputStream;

/**
 * @author shichunyue
 * @date 2025-10-30 18:33
 *
 * "this is aa" 写入 aa.txt
 * "this is bb" 写入bb.txt
 * 并且将aa.txt和bb.txt,压缩为my.zip文件,请问如何用java实现
 */
public class CreateZipExample {
    public static void main(String[] args) {
        // 定义文件名和内容
        String file1 = "aa.txt";
        String content1 = "this is aa 文件";

        String file2 = "bb.txt";
        String content2 = "this is bb 文件";

        String zipFileName = "my.zip";

        try (FileOutputStream fos = new FileOutputStream(zipFileName);
             ZipOutputStream zos = new ZipOutputStream(fos, StandardCharsets.UTF_8)) {

            // 第一步：将内容写入 aa.txt 并添加到 ZIP
            addFileToZip(zos, file1, content1);

            // 第二步：将内容写入 bb.txt 并添加到 ZIP
            addFileToZip(zos, file2, content2);

            System.out.println("✅ 压缩包 '" + zipFileName + "' 创建成功！");

        } catch (IOException e) {
            System.err.println("❌ 压缩失败: " + e.getMessage());
            e.printStackTrace();
        }
    }

    /**
     * 将指定内容作为文件添加到 ZipOutputStream
     */
    private static void addFileToZip(ZipOutputStream zos, String fileName, String content) throws IOException {
        // 1. 创建 ZIP 条目（相当于压缩包中的文件）
        ZipEntry entry = new ZipEntry(fileName);
        zos.putNextEntry(entry);

        // 2. 写入文件内容（字符串转字节）
        byte[] bytes = content.getBytes(StandardCharsets.UTF_8);
        zos.write(bytes, 0, bytes.length);

        // 3. 关闭当前条目
        zos.closeEntry();
    }
}